
package miagetest.client.commands;

import dao.EntityAlreadyExistsException;
import dao.InexistantEntityException;
import entities.Categorie;
import entities.Produit;
import gestion.GestionnaireRemote;
import java.io.PrintStream;
import java.util.List;
import miagetest.client.interfaces.ShellCommand;
import miagetest.client.interfaces.ShellConstantes;
import miagetest.client.interfaces.ShellContext;

/**
 * Commandes liées aux catégories
 * @author Alex
 */
public class CategorieCommandImpl implements ShellCommand {

    private ShellContext context = null;

    public CategorieCommandImpl(ShellContext context) {
        this.context = context;
    }

    @Override
    public String getName() {
        return "categorie";
    }

    @Override
    public String getUsage() {
        return "categorie <-remove idCategorie> <-create libelle> <-getProduits idCategorie>";
    }

    @Override
    public String getShortDescription() {
        return "afficher la liste des catégories, créer ou supprimer une catégorie, afficher les produits d'une catégorie";
    }

    @Override
    public void execute(String cmdline, PrintStream out, PrintStream err) {
        GestionnaireRemote gestionnaire = (GestionnaireRemote) context.getVar(ShellConstantes.GESTIONNAIRE);

        String[] cmdwords = cmdline.split(" ");

        try {
            if (cmdwords.length == 1) //pas de param
            {
                List<Categorie> categories = (List<Categorie>) gestionnaire.getAll(Categorie.class);
                for (Categorie categorie : categories) {
                    out.println(categorie.getId() + " " + categorie.getLibelle());
                }
            } else if (cmdwords.length == 3) //est-ce que le param est bien renseigné
            {
                String cmdParamName = cmdwords[1];
                String cmdParamValue = cmdwords[2];

                if (cmdParamName.equals("-remove")) {

                    gestionnaire.supprimerCategorie(Integer.parseInt(cmdParamValue));
                    out.println("Catégorie supprimée avec succès.");
                    
                } else if (cmdParamName.equals("-create")) {

                    String libelle = cmdParamValue;

                    gestionnaire.creerCategorie(libelle);
                    out.println("Votre catégorie a été ajoutée avec succès.");

                } else if (cmdParamName.equals("-getProduits")) {

                    String idCategorie = cmdParamValue;

                    List<Produit> produits = gestionnaire.getProduitsDeCategorie(Integer.parseInt(idCategorie));
                    for (Produit produit : produits)
                        out.println((produit.getReference()) + " " + produit.getNom() + " " + produit.getPrix() + " " + produit.getCategorie().getLibelle());
                }
            }
        } catch (EntityAlreadyExistsException e) {
            err.println(e.toString());
        } catch (InexistantEntityException e) {
            err.println(e.toString());
        } 
    }
}
